/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Controladores;

import Sueca.Baralho;
import Sueca.Mesa;
import Sueca.Carta;
import Sueca.IA;
import Sueca.Jogador;

import java.io.IOException;


/**
 *
 * @author higorpintoop
 */
public class ControladorMesa {

    private Mesa m_mesa;

    private static ControladorMesa instance;

    private ControladorMesa(){
        m_mesa = Mesa.getInstance();
    }

    public static ControladorMesa getInstance(){
        if(instance == null){
            instance = new ControladorMesa();
        }
        return instance;
    }

    private Mesa getMesa(){
        return m_mesa;
    }
    
    public  void iniciarMesa() throws IOException{
        m_mesa.iniciarmesa();
    }
    
    public void embaralhar(){
        m_mesa.embaralhar();
    }

    public int distribuirCartas() throws IOException{
        return m_mesa.distribuirCartas();
    }

    public void iniciarPartida(){
        m_mesa.inicializaPartida();
    }

    public void iniciaRodada(){
        m_mesa.inicializaRodada();
        
        //a máquina de regras precisa ser iniciada a cada rodada
        m_mesa.inicializaMaquinaRegras();
    }

    public boolean jogaRodada(int ordem, Carta CartaJogada) throws IOException{
        return m_mesa.jogaRodada(ordem,CartaJogada);
    }

    public Jogador venceRodada(){
        return m_mesa.venceRodada();
    }

    public void salvaRodada(int ordem){
        m_mesa.salvaRodada(ordem);
    }

    public int vencePartida(){
        return m_mesa.vencePartida();
    }

    public void salvaPartida(int index){
        m_mesa.salvaPartida(index);
    }

    public int vencedorJogo(){
        return m_mesa.vencedorJogo();
    }

    public void organizadaOrdemRodada(Jogador vencedor){
        m_mesa.organizadaOrdemRodada(vencedor);
    }

    public Carta[] getCartasRodada(){
        return m_mesa.getCartasRodada();
    }

    public Carta[] getCartasPartida(){
        return m_mesa.getCartasPartida();
    }

    public void setCartasRodada(Carta cartaJogada, int ordem){
        m_mesa.setCartasRodada(cartaJogada, ordem);
    }

    public int[] getIdBaralho(){
        int[] id_list;
        id_list = new int[40];
        for (int i=0; i < 40; i++){
            id_list[i] = m_mesa.getBaralho().getBaralho()[i].GetId();
        }
        return id_list;
    }

    public Carta getCarta(int idCartaJogada){
        Carta[] cartas;
        Carta cartaJogada = new Carta();
        int idCarta;
        cartas = m_mesa.getBaralho().getBaralho();
        int i = 0;
        idCarta = cartas[i].GetId();
        while(idCarta != idCartaJogada){
            i++;
            idCarta = cartas[i].GetId();
        }
        cartaJogada = cartas[i];
        return cartaJogada;
    }

    public int[] getIdJogoJ0(){
        Carta[] jogo;
        int[] id;
        jogo = m_mesa.getJogoJ0();
        id = this.getIdJogo(jogo);
        return id;
    }

    public int[] getIdJogoJ1(){
        Carta[] jogo;
        int[] id;
        jogo = m_mesa.getJogoJ1();
        id = this.getIdJogo(jogo);
        return id;
    }

    public int[] getIdJogoJ2(){
        Carta[] jogo;
        int[] id;
        jogo = m_mesa.getJogoJ2();
        id = this.getIdJogo(jogo);
        return id;
    }

    public int[] getIdJogoJ3(){
        Carta[] jogo;
        int[] id;
        jogo = m_mesa.getJogoJ3();
        id = this.getIdJogo(jogo);
        return id;
    }

    public Jogador[] getJogadores(){
        return m_mesa.getJogadores();
    }

    public IA getIA(){
        return m_mesa.getIA();
    }

    private int[] getIdJogo(Carta[] jogo){
        int[] _vetorId;
        _vetorId = new int[jogo.length];
        for (int i = 0; i < jogo.length; i++){
            Carta aux;
            aux = jogo[i];
            _vetorId[i] = aux.GetId();
        }
        return _vetorId;
    }

    public void setOpcao(int trunfo) throws IOException{
        m_mesa.setOpcao(trunfo);
    }

    public int getOpcao(int trunfo){
        return m_mesa.getOpcao();
    }

}
